import { AxiosRequestConfig, AxiosResponse } from 'axios'
import { IProductArgs, IProductShowChange } from '@/types/product'
import { ajaxError } from '@/commponents/common/GlobalModal'
import { ResponseConfig } from './type'
import request from './'

function handlerResultStatus(res: ResponseConfig) {
  if (res.status === 200 && res.msg === 'ok') {
    return res.data
  }
  ajaxError([res.errorMessage])
}

/**
 * 登陆请求
 * @param data
 * @returns
 */
export function loginApi(data: any) {
  // 请求远程数据
  // 可以在请求时传入返回类型
  return request.post<ResponseConfig>('/adminapi/login', data, {
    showLoading: true,
    interceptors: {
      requestInterceptor: (config: AxiosRequestConfig) => {
        console.log('请求的请求拦截, 这里会接收到实例拦截里的配置', config)
        return config
      },
      // 可以用拦截器拦截判断结果
      responseInterceptor: (res: ResponseConfig) => {
        console.log('请求的响应拦截', res)
        if (res.status === 200) {
          return res.data
        }
        // 所有错误都需要提示
        ajaxError([res.msg])
      },
    },
  })
  // return handlerResultStatus(res)
}

/**
 * 获取商品列表页分类表头
 * @returns
 */
export async function getProductTypeApi() {
  // 也可以获取完成数据后再拦截判断结果
  const res = await request.get<ResponseConfig>(
    '/adminapi/product/product/type_header'
  )
  return handlerResultStatus(res).list
}

/**
 * 获取商品列表
 * @param args
 * @returns
 */
export async function getProductListApi(args: IProductArgs) {
  const res = await request.get<ResponseConfig>(
    '/adminapi/product/product',
    args
  )
  return handlerResultStatus(res)
}

/**
 * 获取商品类型分类
 * @param params
 * @returns
 */
export async function getProductCategoryApi() {
  const res = await request.get<ResponseConfig>(
    '/adminapi/product/category/tree/1'
  )
  return handlerResultStatus(res)
}

/**
 * 切换商品上下架功能
 * @param params
 * @returns
 */
export async function changeProductShowApi(params: IProductShowChange) {
  const res = await request.get<ResponseConfig>(
    `/adminapi/product/product/set_show/${params.id}/${params.status}`,
    {}
  )
  return handlerResultStatus(res)
}

/**
 * 获取运费列表
 * @returns
 */
export async function getTemplateApi() {
  const res = await request.get<ResponseConfig>(
    '/adminapi/product/product/get_template'
  )
  return handlerResultStatus(res)
}

/**
 * 获取商品规格列表
 * @returns
 */
export async function getRuleApi() {
  const res = await request.get<ResponseConfig>(
    '/adminapi/product/product/get_rule'
  )
  return handlerResultStatus(res)
}
